home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / util / snap_1_4 / part01 / source / frame.c < prev    next >
C/C++ Source or Header  |  1990-02-11  |  1KB  |  63 lines

  1. IMPORT struct RastPort rp;
  2.  
  3. Point OldFrame[9];
  4. Point NewFrame[9];
  5. LONG OFType = 0;
  6. UWORD Ptrn;
  7.  
  8. STATIC VOID MultiDraw(rp, num, xy)
  9. struct RastPort *rp;
  10. LONG num;
  11. Point *xy;
  12. {
  13.     REGISTER LONG i = 0;
  14.     REGISTER Point *coord = xy;
  15.     while (i<num) {
  16.         Move(rp, (LONG)coord->x, (LONG)coord->y);
  17.         coord++;
  18.         Draw(rp, (LONG)coord->x, (LONG)coord->y);
  19.         i++;
  20.     }
  21. }
  22.  
  23. VOID crawl_frame(dir)
  24. LONG dir;
  25. {
  26.     REGISTER UWORD temp = Ptrn;
  27.     if (dir) {
  28.         Ptrn = ((Ptrn<<1) & 0xfffe) | ((Ptrn & 0x8000)>>15);
  29.     } else {
  30.         Ptrn = ((Ptrn>>1) & 0x7fff) | ((Ptrn & 1)<<15);
  31.     }
  32.     temp ^= Ptrn;
  33.     SetDrPt(&rp, temp);
  34.     MultiDraw(&rp, OFType, &OldFrame[0]);
  35.     SetDrPt(&rp, Ptrn);
  36. }
  37.  
  38. VOID erase_frame()
  39. {
  40.     if (OFType) {
  41.         MultiDraw(&rp, OFType, &OldFrame[0]);
  42.         OFType = 0;
  43.     }
  44. }
  45.  
  46. VOID draw_frame(ft)
  47. LONG ft;
  48. {
  49.     REGISTER LONG i;
  50.       /* Remove old frame */
  51.     WaitTOF();
  52.     erase_frame();
  53.       /* Draw the new frame */
  54.     SetDrPt(&rp, Ptrn);
  55.     MultiDraw(&rp, ft, &NewFrame[0]);
  56.       /* save the frame for erasing later */
  57.     for (i=0; i<=ft; i++) {
  58.         OldFrame[i].x = NewFrame[i].x;
  59.         OldFrame[i].y = NewFrame[i].y;
  60.     }
  61.     OFType = ft;
  62. }
  63.